Mit den SQL-Anweisungen ANY und ALL können Sie Vergleiche zwischen dem Wert einer Spalte und einem Bereich anderer Werte durchführen.
ANY-Operator:
ANY bedeutet, dass die Bedingung wahr ist, wenn die Operation für einen der Werte im Bereich wahr ist.
SELECT column_name(s)
FROM table_name
WHERE column_name operator ANY
(SELECT column_name
FROM table_name
WHERE condition)
Operator ALL:
ALL bedeutet, dass die Bedingung nur dann wahr ist, wenn die Operation für alle Werte im Bereich wahr ist.
SELECT ALL column_name(s)
FROM table_name
WHERE condition
SELECT column_name(s)
FROM table_name
WHERE column_name operator ALL
(SELECT column_name
FROM table_name
WHERE condition)
Das Folgende ist ein Beispiel aus der Tabelle „Products“ („Produkte“) der Datenbank „Northwind“:
ProductID | ProductName | SupplierID | CategoryID | Unit | Price |
---|---|---|---|---|---|
1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18.00 |
2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19.00 |
3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10.00 |
4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22.00 |
5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
6 | Grandma's Boysenberry Spread | 3 | 2 | 12 - 8 oz jars | 25.00 |
7 | Uncle Bob's Organic Dried Pears | 3 | 7 | 12 - 1 lb pkgs. | 30.00 |
8 | Northwoods Cranberry Sauce | 3 | 2 | 12 - 12 oz jars | 40.00 |
9 | Mishi Kobe Niku | 4 | 6 | 18 - 500 g pkgs. | 97.00 |
10 | Ikura | 4 | 8 | 12 - 200 ml jars | 31.00 |
Und das Beispiel aus der Tabelle „OrderDetails“ („Bestelldetails“):
OrderDetailID | OrderID | ProductID | Quantity |
---|---|---|---|
1 | 10248 | 11 | 12 |
2 | 10248 | 42 | 10 |
3 | 10248 | 72 | 5 |
4 | 10249 | 14 | 9 |
5 | 10249 | 51 | 40 |
6 | 10250 | 41 | 10 |
7 | 10250 | 51 | 35 |
8 | 10250 | 65 | 15 |
9 | 10251 | 22 | 6 |
10 | 10251 | 57 | 15 |
Die folgende SQL-Abfrage listet ProductName auf, wenn sie einen (ANY) Datensatz in der Tabelle OrderDetails mit einem Quantity-Wert gleich 10 findet (dies gibt TRUE zurück, da die Spalte Quantity einige Werte von 10 hat):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10)
Die folgende SQL-Abfrage listet ProductName auf, wenn sie einen (ANY) Datensatz in der Tabelle OrderDetails mit einer Menge größer als 99 findet (dies gibt TRUE zurück, da die Spalte Quantity einige Werte größer als 99 enthält):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 99)
Eine andere SQL-Anweisung listet ProductName auf, wenn sie einen (ANY) Datensatz in der Tabelle OrderDetails mit einer Menge größer als 1000 findet (dies gibt FALSE zurück, da die Spalte Quantity keine Werte größer als 1000 enthält):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 1000)
Die folgende SQL-Anweisung listet alle (ALL) Produktnamen auf:
Run SQLSELECT ALL ProductName
FROM Products
WHERE TRUE
Die folgende SQL-Anweisung listet ProductName auf, wenn alle (ALL) Datensätze in der Tabelle OrderDetails eine Anzahl von 10 haben. Dies wird natürlich FALSE zurückgeben, da die Spalte Quantity viele verschiedene Werte hat (nicht nur den Wert 10):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ALL
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10)